//#pragma comment(linker,"/STACK:16777216") /*16Mb*/
//#pragma comment(linker,"/STACK:33554432") /*32Mb*/
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<numeric>
#include<sstream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<memory>
#include<string>
#include<vector>
#include<cctype>
#include<list>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
using namespace std;

typedef unsigned long long      ui64;
typedef long long               i64;
typedef	vector<int>             VI;
typedef	vector<bool>            VB;
typedef	vector<VI>              VVI;
typedef	vector<string>          VS;
typedef	pair<int,int>           PII;
typedef map<string,int>         MSI;
typedef set<int>                SI;
typedef set<string>             SS;
typedef map<int,int>            MII;
typedef	pair<double,double>     PDD;

#define PB                      push_back
#define MP                      make_pair
#define X                       first
#define Y                       second
#define FOR(i, a, b)            for(int i = (a); i < (b); ++i)
#define RFOR(i, a, b)           for(int i = (a) - 1; i >= (b); --i)
#define CLEAR(a, b)             memset(a, b, sizeof(a))
#define SZ(a)                   int((a).size())
#define ALL(a)                  (a).begin(), (a).end()
#define RALL(a)                 (a).rbegin(), (a).rend()
#define INF                     (2000000000)

vector<PII> a;

double dist(int i,int j) {
	return sqrt( 1.0*(a[i].X-a[j].X)*(a[i].X-a[j].X) + 1.0*(a[i].Y-a[j].Y)*(a[i].Y-a[j].Y) );
}

bool cross(int q,int w, int e) {
	//return (fabs(dist(q,w)-dist(q,e)+dist(w,e)) < 1e-10);
	i64 dx = a[e].X - a[q].X;
	i64 dxs = a[w].X - a[q].X;
	i64 dy = a[e].Y - a[q].Y;
	i64 dys = a[w].Y - a[q].Y;
	return  ( (dy*dxs == dx*dys) &&
		min(a[q].X,a[w].X)<=a[e].X && min(a[q].Y,a[w].Y)<=a[e].Y &&
		max(a[q].X,a[w].X)>=a[e].X && max(a[q].Y,a[w].Y)>=a[e].Y );
}

int main()
{
	int n;
	cin >> n;
	a.resize(n);	
	FOR(i,0,n)
		scanf("%d%d",&a[i].X,&a[i].Y);

	double ans = 0.0;
	FOR(i,0,n) {
		FOR(j,i+1,n) {
			//if( i==j ) continue;
			bool ok = true;
			FOR(k,0,n) {
				if( k==i || k==j )
					continue;
				if( cross(i,j,k) ) {
					ok = false;
					break;
				}
			}
			if ( ok ) {
				ans += dist(i,j);
			}
		}
	}
	printf("%.0f\n",ans);
    return 0;
}